﻿<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Facturacion.aspx.cs" MasterPageFile="MasterPage.Master" Inherits="Web.Pages.Facturacion" %>

<asp:Content ID="mainContent" ContentPlaceHolderID="MainContent" runat="Server" >

    <!-- $(document).ready -->  
    <script type="text/javascript" >
        
        var _periodoActual          = [];
        var _periodoAnterior        = [];

        var _guiones = [];

        var controles = { General: {}, Filtro: {} };
        /* General */
        controles.General.Tabla                                 = "tblFacturacion";
        /* Filtro */
        controles.Filtro.PeriodoDesde                           = "txtPeriodo_Desde";
        controles.Filtro.PeriodoHasta                           = "txtPeriodo_Hasta";

        var _idGuiones = [];

        $(document).ready(function() {
            procesarParametros();
            cargarPagina_Facturacion();
        });
        function procesarParametros()
        {
            Framework.Page.Parameters.parseQueryString();
        }
        function cargarPagina_Facturacion()
        {
            Site.Messages.showLoadingMessage();

            Site.Page.setTitle("Facturación del Proyecto");

            var txtPeriodos = $("#{0}, #{1}".format(controles.Filtro.PeriodoDesde, controles.Filtro.PeriodoHasta));

            if ( validarPermisosAdmin(_CurrentUser.Tipo) )
            {
                txtPeriodos.datepicker();
                txtPeriodos.change
                (
                    function()
                    {
                        //display("Selected date: " + dateText + "; input's current value: " + this.value);
                        var desde = $("#{0}".format(controles.Filtro.PeriodoDesde)).datepicker("getDate");
                        var hasta = $("#{0}".format(controles.Filtro.PeriodoHasta)).datepicker("getDate");
                        obtenerPeriodo( _periodoActual, hasta );
                        obtenerPeriodo( _periodoAnterior, desde );
                        Helpers.jqGridHelper.reloadGrid("{0}_Grid".format(controles.General.Tabla));
                    }
                );
            }
            else
            {
                txtPeriodos.attr("readonly", "readonly");
                txtPeriodos.datepicker("option", "disabled", true);
            }

            calcularPeriodos();

            inicializarGrillaFacturacion();

            Site.Messages.hideLoadingMessage();
        }
        function calcularPeriodos()
        {
            var fechaActual   = Helpers.DateTimeHelper.GetCurrentDate();
            var fechaAnterior = new Date(fechaActual);
            Helpers.DateTimeHelper.AddUnits( fechaAnterior, Helpers.DateTimeHelper.DateUnits.Month, -1 );

            obtenerPeriodo( _periodoActual, fechaActual );
            obtenerPeriodo( _periodoAnterior, fechaAnterior );

            var desde = Helpers.DateTimeHelper.FormatDate( _periodoAnterior[0], 'dd/mm/yy' );
            var hasta = Helpers.DateTimeHelper.FormatDate( _periodoActual[1], 'dd/mm/yy' );

            $("#{0}".format(controles.Filtro.PeriodoDesde)).datepicker("setDate", DateTimeHelper.ConvertToDate(_periodoAnterior[0]));
            $("#{0}".format(controles.Filtro.PeriodoHasta)).datepicker("setDate", DateTimeHelper.ConvertToDate(_periodoActual[0]));
        }
        function obtenerPeriodo( periodo, fecha )
        {
            //posiciono la fecha en el 1° día del mes..
            //fecha.setDate( 1 );
            Helpers.DateTimeHelper.AddUnits( fecha, Helpers.DateTimeHelper.DateUnits.Day, 1);

            var inicio  = Helpers.DateTimeHelper.GetDateParts( fecha );
            
            //sumo 1 mes a la fecha actual..
            //fecha.setMonth( fecha.getMonth() + 1 );
            Helpers.DateTimeHelper.AddUnits( fecha, Helpers.DateTimeHelper.DateUnits.Month, 1);

            //..y le resto 1 día para posicionarme en el último día del mes..
            //fecha.setDate( fecha.getDate() - 1);
            Helpers.DateTimeHelper.AddUnits( fecha, Helpers.DateTimeHelper.DateUnits.Day, -1);

            var final   = Helpers.DateTimeHelper.GetDateParts( fecha );

            periodo[0] = inicio.Year + "-" + inicio.Month + "-" + inicio.Day;
            periodo[1] = final.Year + "-" + final.Month + "-" + final.Day;
        }
    </script>
    <!-- Fin de [$(document).ready] -->

    <!-- Grilla Facturación -->
    <script type="text/javascript" >
        function inicializarGrillaFacturacion()
        {
	        var colModel =
            [
                { name: 'Id',               index: 'Id',                    label: 'Id',                align: 'center', hidden: true,  search: true,   editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'IdGuion',          index: 'IdGuion',               label: 'Id Guion',          align: 'center', hidden: true,  search: true,   editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'IdProyecto',       index: 'IdProyecto',            label: 'Id Proyecto',       align: 'center', hidden: true,  search: true,   editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'Episodio',         index: 'Episodio',              label: 'Ep.',               align: 'center', hidden: true,  search: true,   editable: false, sortable: false,   dataType: 'Int32', width: 30 },
                { name: 'Guion',            index: 'Titulo',                label: 'Título',            align: 'center', hidden: true,  search: true,   editable: false, sortable: false,   dataType: 'String', width: 270 },
                //{ name: 'IdProveedor',      index: 'Proveedor.Id',          label: 'Id Proveedor',      align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'Int32'   },
                //{ name: 'TipoProveedor',    index: 'Proveedor.Tipo.Nombre', label: 'Tipo Proveedor',    align: 'center', hidden: true,      search: false,  editable: false, sortable: false,   dataType: 'String'   },
                //{ name: 'Proveedor',        index: 'Proveedor.Apellido',    label: 'Proveedor',         align: 'center', hidden: false,     search: true,   editable: false, sortable: false,    dataType: 'String', width: 150, searchoptions: { sopt: ['eq', 'ne', 'bw','cn' ] } },
                { name: 'Pagos',            index: 'Pagos',                 label: 'Pagos',             align: 'center', hidden: false, search: false,  editable: false, sortable: false,   dataType: 'Int32', width: 50 },
                { name: 'Loops',            index: 'Loops',                 label: 'Loops',             align: 'center', hidden: false, search: false,  editable: false, sortable: false,   dataType: 'Int32', width: 50 },
                { name: 'Importe',          index: 'Importe',               label: 'Importe',           align: 'center', hidden: false, search: false,  editable: false, sortable: false,   dataType: 'Double', width: 100, formatter: importeFormatter, formatoptions: jqGridFormatter_Currency },
                { name: 'Fecha',            index: 'FechaCreacion',         label: 'Fecha Creación',    align: 'center', hidden: false, search: true,   editable: false, sortable: false,   dataType: 'DateTime', width: 110, formatter: jqGridFormatter_Fecha },
                { name: 'IdEstadoGuion',    index: 'IdEstadoGuion',         label: 'Id Estado',         align: 'center', hidden: true,  search: false,  editable: false, sortable: false,   dataType: 'String' },
                { name: 'EstadoGuion',      index: 'EstadoGuion',           label: 'Estado',            align: 'center', hidden: false, search: true,   editable: false, sortable: false,   dataType: 'String', width: 120, formatter: jqGridFormatter_EstadoGuion },
                { name: 'IdEstadoPago',     index: 'IdEstadoPago',          label: 'Id Estado Pago',    align: 'center', hidden: true,  search: false,  editable: false, sortable: false,   dataType: 'Int32'  },
                { name: 'EstadoPago',       index: 'EstadoPago',            label: 'Estado del Pago',   align: 'center', hidden: false, search: true,   editable: false, sortable: false,   dataType: 'String', width: 170, formatter: jqGridFormatter_EstadoPago },
                { name: 'FechaPago',        index: 'FechaPago',             label: 'Fecha Pago',        align: 'center', hidden: false, search: true,   editable: false, sortable: false,   dataType: 'DateTime?', width: 100, formatter: jqGridFormatter_Fecha },
                { name: 'IdMedioPago',      index: 'IdMedioPago',           label: 'Id Medio Pago',     align: 'center', hidden: true,  search: false,  editable: false, sortable: false,   dataType: 'Int32' },
                { name: 'MedioPago',        index: 'MedioPago',             label: 'Medio de Pago',     align: 'center', hidden: false, search: true,   editable: false, sortable: false,   dataType: 'String', width: 280, formatter: jqGridFormatter_MedioPago }
            ];

            var gridOpts                            = Helpers.jqGridHelper.createGridObject();
                gridOpts.IdGrid                     = "{0}_Grid".format(controles.General.Tabla);
                gridOpts.IdPager                    = "{0}_GridPager".format(controles.General.Tabla);
                gridOpts.IdColModel                 = "{0}_GridColModel".format(controles.General.Tabla);
                gridOpts.ColModel                   = colModel;
                gridOpts.Width                      = _GridInfo.Defaults.Width;
                gridOpts.Height                     = _GridInfo.Defaults.Height;
                gridOpts.Title                      = setGridTitle("Facturación del Proyecto");
                gridOpts.DefaultSortColumn          = "Episodio"; //"FehaPago";
                gridOpts.DefaultSortOrder           = "asc"; //"desc";
                gridOpts.PageSizeList               = [5, 10, 20, 30, 50, 100];
                gridOpts.DefaultPageSize            = _GridInfo.Defaults.PageSize;
            /* jqGrid Properties */
                gridOpts.AutoWidth                  = false;
                gridOpts.ShrinkToFit                = false;
                gridOpts.LoadFilters                = grillaFacturacion_LoadFilters;
                gridOpts.LoadFiltersOnSearch        = true;
                gridOpts.OnLoadComplete             = grillaFacturacion_OnLoadComplete;
                gridOpts.EditMode                   = Helpers.jqGridHelper.EditMode.Modal;
            /* jqGrid Instance Urls & Params */
                gridOpts.UrlGet                     = "obtenerFacturacion";
            /* jqGrid Pager Buttons */
                gridOpts.ShowSearch                 = false;
                gridOpts.ShowRefresh                = false;
                gridOpts.MultiSelect                = false;
                //gridOpts.GroupedRowsHeaderStyles      = { color: "blue", background: "lightcyan" };
                //gridOpts.GroupedColumnsHeaderStyles   = { "font-style": "italic" };

                gridOpts.Parameters                 = [Framework.Page.Parameters.idProyecto];

            Helpers.jqGridHelper.setGridOpts(gridOpts);

            Helpers.jqGridHelper.groupRows("{0}_Grid".format(controles.General.Tabla), "IdGuion", '<span class="rowGroupHeader" ></span>');

            //Helpers.jqGridHelper.toggleColumnVisibility("{0}_Grid".format(controles.General.Tabla), "Guion");
        }
        function grillaFacturacion_LoadFilters()
        {
            _guiones = [];

            var rules = [];

            //var condicionPeriodo =
            //    {
            //        condition: "AND",
            //        set:
            //        [
            //            { match: "AND", field: "FechaCreacion", op: "ge", data: _periodoAnterior[0] },
            //            { match: "AND", field: "FechaCreacion", op: "le", data: _periodoActual[1]  }
            //        ]
            //    };
            //rules.push( condicionPeriodo );

            //if ( !isEmpty(Framework.Page.Parameters.idProyecto) )
            //{
            //    var condicionProyecto =
            //        {
            //            condition: "AND",
            //            set:
            //            [
            //                { match: "AND", field: "id_proyecto", op: "eq", data: Framework.Page.Parameters.idProyecto }
            //            ]
            //        };
            //    rules.push( condicionProyecto );
            //}

            //if ( !isEmpty(Framework.Page.Parameters.idProveedor) )
            //{
            //    var condicionProveedor =
            //        {
            //            condition: "AND",
            //            set:
            //            [
            //                { match: "AND", field: "Proveedor.Id", op: "eq", data: Framework.Page.Parameters.idProveedor }
            //            ]
            //        };
            //    rules.push( condicionProveedor );                
            //}
            
            return JSON.stringify(rules);
        }
        datePick = function(elem)
        {
           jQuery(elem).datepicker();
           //jQuery(elem).datepicker( { minDate: -20, maxDate: "+1M +10D" } );
        }
        function importeFormatter(cellValue, options, rowObject)
        {
            processGroupSummaryInfo(cellValue, options, rowObject);
            return Helpers.NumericHelper.Formatting.formatCurrency(cellValue);
        }
        function processGroupSummaryInfo(cellValue, options, rowObject)
        {
            var idFila          = options.rowId; //rowObject[0];
            var idGuion         = rowObject[1];
            var guion           = rowObject[4];
            var pagos           = rowObject[5];
            var importe         = rowObject[7];

            var guionesInfo = _guiones;

            var indice = guionesInfo.length;
            var indiceGuion = -1;

            var infoGuion = {}

            if ( guionesInfo.length == 0 || idGuion != guionesInfo[indice - 1].Id )
            {
                indiceGuion = indice;
                infoGuion   = { Id: -1, Nombre: "", CantidadPagos: 0, ImporteTotal: 0, RowIds: new Array() };
            }
            else
            {
                indiceGuion = indice - 1;
                infoGuion   = guionesInfo[indiceGuion];
            }

            if ( !infoGuion.RowIds.contains(idFila) )
            {
                infoGuion.Id             = idGuion;
                infoGuion.Nombre         = guion;
                infoGuion.CantidadPagos += pagos;
                infoGuion.ImporteTotal  += importe;

                infoGuion.RowIds.push(idFila);

                _guiones[indiceGuion] = infoGuion;
            }

            return cellValue;
        }
        function grillaFacturacion_OnLoadComplete()
        {
            var groupHeaderFormat = "<b>{0}</b> - Pagos: <b>{1}</b> - Importe total: <b>{2}</b>";
            
            var guionesInfo = _guiones;
            for (var i = 0; i < guionesInfo.length; i++)
            {
                var infoGuion = guionesInfo[i];
                /* Código para remover el link de la columna Guion, copiarlo al header del Group, y sólo dejar el texto en la celda original*/
                //  ==> Innecesario si la columna "Guion" está hidden:true
                //var rowIds      = infoGuion.RowIds;
                //for (var j = 0; j < rowIds.length; j++)
                //{
                //    var cell = Helpers.HtmlHelper.Table.getCell("{0}_Grid".format(controles.General.Tabla), rowIds[j], "aria-describedby", "{0}_Grid_{1}".format(controles.General.Tabla, "Guion"));
                //        cell.html( cell.text() );
                //}
                var text = groupHeaderFormat.format(infoGuion.Nombre, infoGuion.CantidadPagos, Helpers.NumericHelper.Formatting.formatCurrency(infoGuion.ImporteTotal))
                Helpers.jqGridHelper.setRowGroupHeaderText("{0}_Grid".format(controles.General.Tabla), i, text);
            }

            grillaFacturacion_AgregarHandlersBotones();

            Helpers.jqGridHelper.expandAllRowGroups(controles.General.Tabla, false);
        }
        function grillaFacturacion_AgregarHandlersBotones()
        {
            Framework.Handlers.onClick($(".btnVerLiquidaciones"),
                function ()
                {
                    var idGuion = $(this).attr("id").replace("btnVerLiquidaciones_", "");
                    verLiquidacion(idGuion);
                }
            );
            mostrarTooltip(".btnVerLiquidaciones", "Ver Liquidación del Guión");
        }
    </script>
    <!-- Fin de [Grilla Facturación] -->

    <!--HTML-->
    <div id="content" style="margin:0 auto; width:90%;" >

        <br />

        <!-- Período -->
        <div style="display:none" >
            <label style="font-weight:bold" >Período:&nbsp;&nbsp;</label>
            Desde&nbsp;<input id="txtPeriodo_Desde" type="text" style="width:80px; text-align:center" />
            Hasta&nbsp;<input id="txtPeriodo_Hasta" type="text" style="width:80px; text-align:center" />
            <!--<label id="lblPeriodoActual" ></label>-->
            <br />
        </div>

        <!-- jqGrid -->
        <div class="jqGridContainer" >
            <table id="tblFacturacion_Grid" ></table>
            <div id="tblFacturacion_GridPager" ></div>
            <input type="hidden" id="tblFacturacion_GridColModel" />      
        </div>

    </div>

</asp:Content>